#!/usr/bin/env python
#coding=utf-8
# author:wade
# contact: 317909531@qq.com
# datetime:2020/5/4 20:41
# import os,django
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shareAPI2020TB.settings")# project_name 项目名称
# django.setup()
"""说明"""
from BaseWeb import views as BaseWebView
from shareAPI2020TB.settings import MEDIA_ROOT
from tbitem import models
from tbitem.JD_utils.postMain1 import jd_run
from tbitem.PostTools.PostBBS import postQiBo_By_FakeUrl, postDISCUZ_By_FakeUrl
from tbitem.util.get_0_diy import setp0
from tbitem.util.get_5_postDiscuz import step5
from tbitem.util.reMatch import readjson

"""
文件说明：计划任务清单

------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------

数据表状态说明：

link表的status状态说明：     
                            status = 1 ：入库成功默认值就是1
                            status = 2 ：网页是有效的，有tbid的网页，修改为2（step2的任务）
                            status = 3 ：网页内没有tbid，属于垃圾网页的修改为3（step2的任务）
content表的status状态说明：  
                            status = 1 ：入库成功默认值就是1
                            status = 2 ：淘宝爬虫完成，修改为2（step3的任务）
                            status = 3/4 ：发帖完成，修改为3,发帖失败，修改为4（step4的任务，或者其他发布成功程序的任务）
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------

TimeRun.py  设计调用计划，调用step步骤

step1 调用bbs的帖子页面，收集标题和帖子地址后入库
        link的status状态初始化：     status = 1 
        
step2 负责爬取bbs的内容，抓到商品id和标题到数据库BBSContent,在这个环节对垃圾网页进行过滤，保证写入content表的ID都是淘宝客id（去伪存真，修改link的status，分成2或者3）
        这个过程中需要维护两个状态
            link的status的状态修改：将status 由1改为2或者3
                                status = 2 ：网页是有效的，有tbid的网页，修改为2（step2的任务）
                                status = 3 ：网页内没有tbid，属于垃圾网页的修改为3（step2的任务）
            还有content的状态初始化：
                                status = 1 ：入库成功默认值就是1
                                # 状态（由第三步，发企博时候维护更新）：1,默认入库  2.淘宝爬虫完成，等待发帖  3.发帖完成  4.失败状态
                                
step3 负责把bbs的内容遍历淘宝id，抓取淘宝评论到数据库（利用淘宝协议爬取ID对应网页，保存图文到数据库）
step4 #取出一条状态2的bbscontent数据，然后发企博,发布成功，设置 BBSContent 表状态为3（已成功发布）
    maokoulingClass.py 提供给step4 发帖时候实时解析淘宝客链接并入库
    qiboPOST.py  给同给step4 qiboo网的发帖配置
    itemTemplate.py  给step4 从库中读取数据，组合成文章返回给step4
    
测试发帖.py  接口 /tbitem/test/     提供一次发帖内容测试
生产发帖     接口 /tbitem/start/999/  多账号连续发帖
"""
import datetime

from tbitem.util import get_3_tbContent
# from tbitem.util.get_1_links import step1
from tbitem.util.get_2_keyWord import step2
from tbitem.util.get_3_tbContent import step3
from tbitem.util.get_4_postQb import step4
from tbitem.util.get_1_links import step1


"""
1.定时爬取bbs的主链接入库 step1
2.定时解析bbs的内容入库 step2
3.定时解析 item的评论和图片入库 step3
4.定时发布企博网  step4
"""
import logging
server_logger = logging.getLogger("server")

import time
# 定义你要周期运行的函数

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()

def job():
    run_modelQuery = models.RunModel.objects.first()
    if not run_modelQuery:
        logging.warning('请添加模式表，默认0是bbs发帖，1是调用手动表')
    if run_modelQuery.modelType == 0:
        #打印初始化信息
        collectDBData()
        step1(160)  #160板块
        # step1(161)  #161板块
        step2()
        step3()
        step5()
        step4()
        # BaseWebView.addWEbContent()
    elif run_modelQuery.modelType == 1:
        step3()
        step4()
    elif run_modelQuery.modelType == 2:
        #打印初始化信息
        collectDBData()
        step1(160)  # 160板块
        # step1(161)  # 161板块
        step2()
        step3()
        step5()
        BaseWebView.addWEbContent()




def postJdjog():
    pass
    # jd = jd_run(qibo_username="11325433@qq.com",bbs_username="怎么样评测")
    # for i in range(100):
    #     jd.qibo()
    #     jd.bbs()
    #     jd.web()
    #     server_logger.error('qibo_username="11325433@qq.com",bbs_username="怎么样评测" -----发布成功')
    #     time.sleep(60)
    #
    #
    # jd = jd_run(qibo_username="wyouhui",bbs_username="好不好评测")
    # for i in range(100):
    #     jd.qibo()
    #     jd.bbs()
    #     jd.web()
    #     server_logger.error('qibo_username="11325433@qq.com",bbs_username="怎么样评测" -----发布成功')
    #     time.sleep(60)




#对数据库的基础信息进行掌握和了解


def collectDBData():
    collectDbDict = {
        'RunModel_status_模式': 0,  #模式
        'BBsLinks_status_1_入库原始数据待分析数量': 0, #入库原始数据待分析数量
        'BBsLinks_status_2_入库有效库存（只要）' : 0, # 入库有效库存（只要）
        'BBsLinks_status_3_入库筛除垃圾总数量' : 0,  # 入库筛除垃圾总数量
        'BBSContent_status_1_商品标题和id库存数量': 0,  # 商品标题和id库存数量
        'BBSContent_status_2_爬虫图文入库数量（可发帖真实库存）' : 0,  # 爬虫图文入库数量（可发帖真实库存）
        'BBSContent_status_3_已经发布成功的总数量' : 0, # 已经发布成功的总数量
        'BBSContent_status_4_发布失败的数量' : 0, # 发布失败的数量
        'TbIndex_nums_有图文的tbid数量' : 0,  # 有图文的tbid数量
        'QiBoAccount_num_企博在线账号数量' : 0,  # 企博在线账号数量
        'DiscuzAccount_num_BBS在线账号数量': 0, # BBS在线账号数量
        }

    collectDbDict['RunModel_status_模式'] = models.RunModel.objects.all().first().modelType  #运行模式
    collectDbDict['BBsLinks_status_1_入库原始数据待分析数量'] = models.BBsLinks.objects.filter(status=1).count()  #入库连接
    collectDbDict['BBsLinks_status_2_入库有效库存'] = models.BBsLinks.objects.filter(status=2).count()  #入库有效库存（只要）
    collectDbDict['BBsLinks_status_3_入库筛除垃圾总数量'] = models.BBsLinks.objects.filter(status=3).count()  #入库筛除垃圾总数量
    collectDbDict['BBSContent_status_1_商品标题和id库存数量'] = models.BBSContent.objects.filter(status=1).count()  #商品标题和id库存数量
    collectDbDict['BBSContent_status_2_爬虫图文入库数量（可发帖真实库存）'] = models.BBSContent.objects.filter(status=2).count()  #爬虫图文入库数量（可发帖真实库存）
    collectDbDict['BBSContent_status_3_已经发布成功的总数量'] = models.BBSContent.objects.filter(status=3).count()  #已经发布成功的总数量
    collectDbDict['BBSContent_status_4_发布失败的数量'] = models.BBSContent.objects.filter(status=4).count()  #发布失败的数量
    collectDbDict['TbIndex_nums_有图文的tbid数量'] = models.TbIndex.objects.all().count()  #有图文的tbid数量
    collectDbDict['QiBoAccount_num_企博在线账号数量'] = models.QiBoAccount.objects.all().count()  #企博在线账号数量
    collectDbDict['DiscuzAccount_num_BBS在线账号数量'] = models.DiscuzAccount.objects.all().count()  #BBS在线账号数量
    logging.error(collectDbDict)
    return collectDbDict

def startRun():
    server_logger.error("startRun开始运行调度任务")
    scheduler.add_job(postJdjog, 'interval', hours=24,id='my_job_id1',next_run_time=datetime.datetime.now())
    scheduler.start()


def endRun():
    server_logger.error("endRun开始结束调度任务")
    scheduler.shutdown()
    server_logger.error("scheduler shutdown")




if __name__ == '__main__':
    # print(type(models.RunModel.objects.all().first()))
    # print(models.RunModel.objects.all())
    # for obj  in models.RunModel.objects.all():
    #     print(obj.modelType)
    # print(models.RunModel.objects.all().first().modelType)
    startRun()